home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / CRYPT16.ZIP / DECOM.ASM < prev    next >
Assembly Source File  |  1993-06-17  |  5KB  |  236 lines

  1. ;DECOM - has few safety features right now, be careful =)
  2.  
  3. .model tiny
  4. .radix 16
  5. .code
  6.     org 100
  7.     include wolf.lib
  8.  
  9. start:
  10.     printf  intro, ds
  11. Release_Memory:
  12.     mov         bx,(end_unmte-start+10f)/10     ;Release all but what
  13.     changealloc bx,es                               ;our prog needs.
  14.  
  15. Allocate_Block_For_MTE_Prog:                    ;Allocate memory for
  16.     mov     bx,1000                         ;MTE-inf prog.
  17.     alloc   bx
  18.     jnc     Memory_Good
  19.     jmp     exit
  20. Memory_Good:
  21.     push    ax
  22.  
  23. Get_Filenames:
  24.     printf  Enter_FN, ds
  25.     gets    filename_buf, ds, 30
  26.     printf  Enter_DN, ds
  27.     gets    unenc_buf, ds, 30
  28.  
  29. Open_Prog:
  30.     fopen   0, filename, cs
  31.     jnc     Load_Prog
  32.     printf  Bad_File, ds
  33.     jmp     Get_Filenames
  34.  
  35. Load_Prog:
  36.     pop     ax
  37.     sub     ax,10
  38.     mov     ds,ax                 ;Convert Seg:0 to Seg:100
  39.     fread   bx, 0ffff, 100, ax
  40.     mov     cs:[MTE_Size],ax
  41.     mov     cs:[MTE_Segment],ds
  42.  
  43. Close_Prog:
  44.     fclose  bx
  45.  
  46. Setup_Trace:
  47.     push    ds ds
  48.  
  49.     mov     byte ptr cs:[Success],1
  50.     
  51.     push    cs
  52.     pop     ds
  53.     get_int  1
  54.     mov     word ptr [IP_01],bx
  55.     mov     word ptr [CS_01],es
  56.     set_int  1, Int_01_Handler, ds
  57.     
  58.     pop     ds es           ;restore segment regs to MTE prog
  59.     
  60.     cli        
  61.     mov     ax,ds
  62.     mov     ss,ax           ;setup new stack
  63.     mov     sp,0fffe
  64.     sti
  65.  
  66.     xor     ax,ax
  67.     mov     bx,ax
  68.     mov     cx,ax
  69.     mov     dx,ax           ;Zero all registers
  70.     mov     si,ax
  71.     mov     di,ax
  72.     mov     bp,ax
  73.  
  74.     
  75.     pushf                   ;Setup stack for IRET to code
  76.     pop     ax
  77.     or      ax,100
  78.     push    ax              ;Set flag on IRET
  79.  
  80.     push    ds
  81.     mov     ax,100
  82.     push    ax
  83.     
  84.     xor     ax,ax
  85.  
  86.     iret                    ;Jump to MTE prog with trap set.
  87.  
  88. Done_Trace:
  89.     push    cs cs
  90.     pop     es ds           ;restore seg regs
  91.     
  92.     cli
  93.     mov     ax,ds
  94.     mov     ss,ax           ;reset stack
  95.     mov     sp,0fffe
  96.     sti
  97.  
  98. Restore_Int_01:
  99.     mov     dx, word ptr cs:[CS_01]
  100.     mov     ds,dx
  101.     mov     dx, word ptr cs:[IP_01]
  102.     set_int  1, dx, ds
  103.     push    cs 
  104.     pop     ds
  105.  
  106.     cmp     byte ptr cs:[Success],0
  107.     jne     Save_It
  108.     
  109.  
  110.     printf  halted, ds
  111.     jmp     Exit
  112.  
  113. Save_It:
  114.     mov     ah,3c
  115.     xor     cx,cx
  116.     mov     dx,offset Unencrypted
  117.     int     21
  118.  
  119.     xchg    bx,ax
  120.  
  121.     mov     ah,40
  122.     mov     dx,word ptr cs:[MTE_Segment]
  123.     mov     ds,dx
  124.     mov     dx,100
  125.     mov     cx,word ptr cs:[MTE_Size]
  126.     int     21
  127.  
  128.     mov     ah,3e
  129.     int     21
  130. Exit:
  131.     terminate
  132.  
  133. Int_01_Handler:
  134.     push    bp
  135.     mov     bp,sp
  136.     push    ax bx cx dx es ds si di
  137.     mov     bx, word ptr ss:[bp+4]  ;CS
  138.     mov     ds,bx
  139.     mov     bx,word ptr ss:[bp+2]   ;IP
  140.     mov     ax,word ptr ss:[bp+6]   ;flags
  141.     and     ax,40
  142.  
  143.     cmp     byte ptr ds:[bx],0cdh   ;Interrupt call
  144.     je      Stop_Execution
  145.     cmp     byte ptr ds:[bx],9a     ;Far Call
  146.     je      Stop_Execution
  147.     cmp     byte ptr ds:[bx],9c     ;Pushf
  148.     je      Stop_Execution
  149.  
  150. ES_DS_CHeck:        
  151.     push    bx
  152.     mov     bx,ds
  153.     cmp     word ptr ds:[bp-0c],bx  ;CS != DS
  154.     jne     Done_Check
  155.     cmp     word ptr ds:[bp-0a],bx  ;CS != ES
  156. Done_Check:
  157.     pop     bx
  158.     jne     Stop_Execution
  159.  
  160.     
  161. Check_For_Encryption_Loop:        
  162.     cmp     byte ptr ds:[bx],75     ;Check if JNZ (end of MTE decrypt)
  163.     je      Is_JNZ
  164.     cmp     byte ptr ds:[bx],74     ;Check for other loop jumps..
  165.     je      Is_JZ
  166.     cmp     byte ptr ds:[bx],0e0    
  167.     je      Is_LOOPNZ
  168.     cmp     byte ptr ds:[bx],0e1
  169.     je      Is_LOOPZ
  170.     cmp     byte ptr ds:[bx],0e2
  171.     je      Is_LOOP
  172. Continue_Decrypt:
  173. Done_Int_01_Handler:
  174.     pop     di si ds es dx cx bx ax
  175.     pop     bp
  176.     iret
  177.  
  178. Stop_Execution:
  179.     mov     byte ptr cs:[Success],0
  180.     jmp     Done_Trace
  181.  
  182.  
  183. Is_LOOPNZ:
  184. Is_JNZ:
  185.     or      ax,ax
  186.     jz      Jump_True
  187.     jmp     Jump_False
  188.  
  189. Is_LOOPZ:       
  190. Is_JZ:
  191.     or      ax,ax
  192.     jz      Jump_False
  193.     jmp     Jump_True
  194.  
  195. Is_LOOP:
  196.     dec     cx
  197.     jz      Jump_False
  198.     jmp     Jump_True
  199.  
  200. Jump_False:
  201.     cmp     byte ptr ds:[bx+1], 80
  202.     jae     Done_Decrypt
  203.     jmp     Continue_Decrypt
  204.  
  205. Jump_True:
  206.     cmp     byte ptr ds:[bx+1],80
  207.     ;jae     Continue_Decrypt
  208.     jmp     Continue_Decrypt        ;MTE only... change later
  209. Done_Decrypt:        
  210.     jmp     Done_Trace
  211.  
  212.  
  213. IP_01   dw      0
  214. CS_01   dw      0
  215.  
  216. MTE_Segment     dw      0
  217. MTE_Size        dw      0
  218.  
  219. Success         db      0
  220.  
  221. halted          db      0a,0dh,'Sorry, cannot decrypt file safely.',0
  222. intro           db      'DECOM 0.9ß, COM (MTE) File Decryptor (c) 1993 Black Wolf.',0a,0dh
  223.         db      'Beta-Test Version, Use At Your Own Risk.',0
  224. Enter_FN        db      0a,0dh,'Please Enter Source Filename: ',0
  225. Enter_DN        db      0a,0dh,'Now Enter The Destination Filename: ',0
  226. Bad_File        db      0a,0dh,'Sorry, file not found.',0
  227.  
  228. filename_buf    db      ?,?
  229. filename        db      30 dup(?)
  230.  
  231. unenc_buf       db      ?,?
  232. unencrypted     db      30 dup(?)
  233.  
  234. end_unmte:
  235. end start
  236.